/*!
// Testweb v0.4.0
// http://or-change.cn
// Copyright 2014 OrChange Inc. All rights reserved.
// Licensed under the GPL License.
*/

/**
 * 所有这个应用的服务端要管理的实体都继承Entity类
 * @module Entity
 * @example
 *     var Entity = require("lib/class/entity");
 */
define(function (require, exports, module) {
	"use strict";
	var Entity;
	/**
	 * 每一个该应用中的实体都继承自这个类，用于管理与应用不相关的信息。
	 * 另外，该构造函数提供基本的Info与Property的存取器方法。
	 *
	 * @class Condition
	 * @constructor
	 * @param object {string} CSSpath string of object.
	 */
	Entity = function Entity(options) {
		options = options || {};
		/**
		 * 与应用核心无关的必要信息由Entity管理在info属性里。
		 * @property info
		 * @type object
		 */
		this.info = {
			// 如果不存在ID说明该实例在服务端不存在
			ID: options.ID || "",
			// 名字不允许为空
			name: options.name || "Warning: name undefined!",
			author: options.author || "//TODO from global",
			comment: options.comment || "",
			// 更新时间与创建时间由服务端确定
			updatetime: options.updatetime || 0,
			createtime: options.createtime || 0
		};
	};
	/**
	 * 设置info的数据
	 * @method setInfo
	 * @param key {string} 键
	 * @param value 值
	 * @returns {Entity} this
	 */
	Entity.prototype.setInfo = function (key, value) {
		if (this.info.hasOwnProperty(key)) {
			this.info[key] = value;
		}
		return this;
	};
	/**
	 * 获取info的数据
	 * @method setInfo
	 * @param key {string} 键
	 * @returns value
	 */
	Entity.prototype.getInfo = function (key) {
		if (this.info.hasOwnProperty(key)) {
			return this.info[key];
		}
		return undefined;
	};
	/**
	 * 设置Entity对象的属性
	 * @method setProperty
	 * @param key {string} 键
	 * @param value 值
	 * @returns {Entity} this
	 */
	Entity.prototype.setProperty = function (key, value) {
		if (this.hasOwnProperty(key) && key !== "info") {
			this[key] = value;
		}
		return this;
	};
	/**
	 * 设置Entity对象的属性
	 * @method getProperty
	 * @param key {string} 键
	 * @returns value
	 */
	Entity.prototype.getProperty = function (key) {
		if (this.hasOwnProperty(key) && key !== "info") {
			return this[key];
		}
		return undefined;
	};

	return Entity;
});